home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Visual Basic 4 Database How-To
/
Visual Basic 4 Database - How-to (The Waite Group)(1995).iso
/
author.cl_
/
author.cl
Wrap
Text File
|
1995-03-12
|
4KB
|
150 lines
Version 1.0 Class
Attribute VB_Name = "clsAuthor"
Attribute VB_Creatable = True
Attribute VB_Exposed = True
Option Explicit
Private m_Name As String
Private m_Born As Integer
Private m_ID As Long
Private m_Database As String
Private m_Titles As New Collection
Property Let AuthorName(theName As String)
m_Name = theName
End Property
Property Let YearBorn(theYear As Integer)
If theYear <= Year(Now()) And theYear >= 1 Then m_Born = theYear
End Property
Property Let DatabaseName(theDatabase As String)
m_Database = theDatabase
End Property
Property Get AuthorName() As String
AuthorName = m_Name
End Property
Property Get YearBorn() As Integer
YearBorn = m_Born
End Property
Property Get AuthorID() As Long
AuthorID = m_ID
End Property
Property Get DatabaseName() As String
DatabaseName = m_Database
End Property
Property Get Titles() As Collection
Set Titles = m_Titles
End Property
Public Sub Initialize(rs As Recordset)
m_ID = rs![Au_ID]
If Not IsNull(rs![author]) Then m_Name = rs![author] Else m_Name = ""
If Not IsNull(rs![Year Born]) Then m_Born = rs![Year Born] Else m_Born = 0
End Sub
Public Function NumberOfTitles(readNow As Boolean) As Integer
If readNow Then ReadTitles
NumberOfTitles = m_Titles.Count
End Function
Public Function GetTitle(tl As clsTitle) As Boolean
Dim i As Integer
Dim found As Boolean
found = False
If m_Titles.Count = 0 Then ReadTitles
For i = 1 To m_Titles.Count
If m_Titles(i).Title = tl.Title Then
Set tl = m_Titles(i)
found = True
Exit For
End If
Next
GetTitle = True
End Function
Public Function ReadAuthor(whichAuthor As Variant, Optional theDatabaseName As Variant) As Boolean
Dim db As Database
Dim rs As Recordset
Dim sql As String
On Error GoTo ReadRecordError
If IsMissing(theDatabaseName) Then
If m_Database = "" Then Error ERR_DATABASENOTSPECIFIED
Else
m_Database = theDatabaseName
End If
Set db = DBEngine.Workspaces(0).OpenDatabase(m_Database, False, True)
If IsNumeric(whichAuthor) Then
Set rs = db.OpenRecordset("Authors", dbOpenTable)
rs.Index = "PrimaryKey"
rs.Seek "=", CLng(whichAuthor)
If rs.NoMatch Then Error ERR_CANTFINDRECORD
ElseIf VarType(whichAuthor) = vbString Then
sql = "SELECT * FROM Authors WHERE Author = '" & whichAuthor & "'"
Set rs = db.OpenRecordset(sql, dbOpenSnapshot)
If rs.RecordCount = 0 Then Error ERR_CANTFINDRECORD
rs.MoveLast
If rs.RecordCount <> 1 Then Error ERR_TOOMANYRECORDS
Else
Error ERR_WRONGVARTYPE
End If
m_ID = rs![Au_ID]
If Not IsNull(rs![author]) Then m_Name = rs![author]
If Not IsNull(rs![Year Born]) Then m_Born = rs![Year Born]
rs.Close
db.Close
ReadAuthor = True
Exit Function
ReadRecordError:
LastError = Err.Number
ReadAuthor = False
Exit Function
End Function
Public Function ReadTitles(Optional theDatabaseName As Variant) As Integer
Dim db As Database
Dim rs As Recordset
Dim sql As String
Dim ti As clsTitle
Dim i As Integer
On Error GoTo ListTitlesError
If m_ID < 1 Then Error ERR_OBJECTNOTINITIALIZED
For i = m_Titles.Count To 1 Step -1
m_Titles.Remove i
Next i
If IsMissing(theDatabaseName) Then
If m_Database = "" Then Error ERR_DATABASENOTSPECIFIED
Else
m_Database = theDatabaseName
End If
Set db = DBEngine.Workspaces(0).OpenDatabase(m_Database, False, True)
sql = "SELECT Titles.* FROM Authors "
sql = sql & " INNER JOIN (Titles INNER JOIN [Title Author]"
sql = sql & " ON Titles.ISBN = [Title Author].ISBN)"
sql = sql & " ON Authors.Au_ID = [Title Author].Au_ID"
sql = sql & " WHERE Authors.Au_ID =" & Str$(m_ID)
Set rs = db.OpenRecordset(sql, dbOpenSnapshot)
If rs.RecordCount <> 0 Then
rs.MoveFirst
Do
Set ti = New clsTitle
ti.Initialize rs, m_Database
m_Titles.Add ti
rs.MoveNext
Loop While Not rs.EOF
End If
ReadTitles = m_Titles.Count
Exit Function
ListTitlesError:
LastError = Err.Number
ErrorHandler vbExclamation
ReadTitles = 0
Exit Function
End Function